package com.neusoft.work.util;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

public class PaginationUtil {

    /**
     * 对列表进行分页，支持 long 类型的页码和页大小
     * @param list 原始数据列表
     * @param pageNum 当前页码
     * @param pageSize 每页数据量
     * @return 分页后的数据
     */
    public static <T> List<T> paginate(List<T> list, long pageNum, long pageSize) {
        // 参数校验
        if (list == null || list.isEmpty() || pageNum <= 0 || pageSize <= 0) {
            return new ArrayList<>();
        }

        long totalCount = list.size();
        long totalPages = (totalCount + pageSize - 1) / pageSize; // 计算总页数

        // 处理页码越界情况
        if (pageNum > totalPages) {
            pageNum = totalPages;
        } else if (pageNum < 1) {
            pageNum = 1;
        }

        // 计算数据起始索引
        long startIndex = (pageNum - 1) * pageSize;

        // 使用流式处理
        return list.stream()
                .skip(startIndex)
                .limit(pageSize)
                .collect(Collectors.toList());
    }

    /**
     * 获取总页数，支持 long 类型
     */
    public static long getTotalPages(long totalCount, long pageSize) {
        if (totalCount <= 0 || pageSize <= 0) {
            return 0;
        }
        return (totalCount + pageSize - 1) / pageSize;
    }
}
